首頁技術文章正文

Python的標準模塊:sys、os、random和time

更新時間:2021-04-22 來源:黑馬程序員 瀏覽量:

1577370495235_學IT就到黑馬程序員.gif


Python內置了許多標準模塊,例如sys、os、random和time模塊等,下面為大家介紹幾個常用的標準模塊。

1.sys模塊

sys模塊中提供了一系列與Python解釋器交互的函數和變量,用于操控Python的運行時環(huán)境。sys模塊中常用變量與函數如表1所示。

表1 sys模塊的常用變量與函數

變量/函數說明
sys.argv獲取命令行參數列表,該列表中的第一個元素是程序自身所在路徑
sys.version獲取Python解釋器的版本信息
sys.path獲取模塊的搜索路徑,該變量的初值為環(huán)境變量PYTHONPATH的值
sys.platform返回操作系統平臺的名稱
sys.exit()退出當前程序??蔀樵摵瘮祩鬟f參數,以設置返回值或退出信息,正常退出返回值為0       
下面通過一些示例來演示sys模塊中部分變量和函數的用法。

(1)argv變量

通過import語句導入sys模塊,然后訪問argv變量獲取命令行參數列表,具體代碼如下:

import sys
print(sys.argv)

運行代碼,結果如下所示。

程序退出

2.os模塊

os模塊中提供了訪問操作系統服務的功能,該模塊中常用函數如表8-2所示。

表2 os模塊的常用函數

函數說明
os.getcwd()獲取當前工作路徑,即當前Python腳本所在的路徑
os.chdir()改變當前腳本的工作路徑
os.remove()刪除指定文件
os._exit()終止Python程序
os.path.abspath(path)返回path規(guī)范化的絕對路徑
os.path.split(path)將path分隔為形如(目錄,文件名)的二元組并返回                                      
下面通過一些示例來演示os模塊中部分函數的用法。

(1)getcwd()函數

通過os模塊中的getcwd()函數獲取當前的工作路徑,示例代碼如下。

import os
print(os.getcwd()) # 獲取當前的工作路徑

運行代碼,結果如下所示。

D:\Python項目\模塊使用

(2)exit()函數

os模塊中也有終止程序的函數——_exit(),該函數與sys模塊中的exit()函數略有不同。執(zhí)行os模塊中的exit()函數后,程序會立即結束,之后的代碼也不會再執(zhí)行;而執(zhí)行sys模塊中的exit()函數會引發(fā)一個SystemExit異常,若沒有捕獲該異常退出程序,后面的代碼不再執(zhí)行;若捕獲到該異常,則后續(xù)的代碼仍然會執(zhí)行。關于os和sys模塊的exit()函數的用法比較如下。

使用os模塊中的_exit()函數終止程序,示例代碼如下:

import os
print("執(zhí)行_exit()之前")
try:
    os._exit(0)
    print("執(zhí)行_exit()之后")
except:
    print("程序結束")

運行代碼,結果如下所示。

執(zhí)行_exit()之前

由以上結果可知,程序在執(zhí)行完“os._exit(0)”代碼后立即結束,不再執(zhí)行后續(xù)的代碼。

使用sys模塊中的exit()函數終止程序,示例代碼如下:

import sys
print("執(zhí)行_exit()之前")
try:
    sys.exit(0)
    print("執(zhí)行_exit()之后")
except:
    print("程序結束")

運行代碼,結果如下所示。

執(zhí)行_exit()之前
程序結束

由以上結果可知,程序執(zhí)行完“sys.exit(0)”代碼后沒有立即結束。由于try子句中捕獲了SystemExit異常,因此try子句后續(xù)的代碼不再執(zhí)行,而是繼續(xù)執(zhí)行異常處理except子句。

(3)chdir ()函數

os模塊中還提供了修改當前工作路徑的chdir()函數,示例代碼如下:

import os
path = r"D:\Python項目\井字棋V1.0"
# 查看當前工作目錄
current_path = os.getcwd()
print(f"修改前工作目錄為{current_path}")
# 修改當前工作目錄
os.chdir(path)
# 查看修改后的工作目錄
current_path = os.getcwd()
print(f"修改后工作目錄為{current_path}")

上述代碼首先使用getcwd()函數獲取當前的工作路徑,然后通過chdir()函數修改了當前的工作路徑。

運行代碼,結果如下所示。

修改前工作目錄為D:\Python項目\模塊使用
修改后工作目錄為D:\Python項目\井字棋V1.0

3.random模塊

random模塊用于生成隨機數,它提供了很多函數。接下來,針對常見的隨機數函數進行講解,具體如下。

(1)random.random()

返回0與1之間的隨機浮點數N,范圍為0 <= N < 1.0。

接下來,通過一個案例來演示random()的使用,具體代碼如下所示:

import random
# 生成第1個隨機數
print("random():", random.random())
# 生成第2個隨機數
print("random():", random.random())

運行代碼,結果如圖1所示。

Python的標準模塊:sys、os、random和time

圖2運行結果

(3)random.randint(a,b)

返回一個隨機的整數N,N的取值范圍為a <= N <= b。需要注意的是,a和b的取值必須為整數,并且a的值一定要小于b的值,示例代碼如下:

import random
# 生成的隨機數為N,N的取值范圍為12 <= N <= 20
print(random.randint(12, 20))
# 生成的隨機數為N,N的結果永遠是20
print(random.randint(20, 20))
# print(random.randint(20, 10))  # 該語句是錯誤的,下限(a)必須小于上限(b)。

運行代碼,結果如圖3所示。

Python的標準模塊:sys、os、random和time

圖3 運行結果

(4)random.randrange([start], stop[, step])

返回指定遞增基數集合中的一個隨機數,基數默認值為1。其中,start參數用于指定范圍內的開始值,其包含在范圍內;end參數用于指定范圍內的結束值,其不包含在范圍內;step表示遞增基數。

上述這些參數必須為整數。例如,random.randrange (10, 100, 2)相當于從[10, 12, 14, 16, … 96, 98]序列中獲取一個隨機數。

(5)random.choice(sequence)

從sequence中返回一個隨機的元素。其中,sequence參數可以是列表、元組或字符串。示例代碼如下:

random.choice("學習Python")
random.choice(["JGood","is", "a","handsome", "boy"])
random.choice(("Tuple","List", "Dict"))

需要注意的是,若sequence為空,則會引發(fā)IndexError異常。

(6)random.shuffle (x[,random])

用于將列表中的元素打亂順序,俗稱為洗牌。示例代碼如下:

demo_list = ["Python", "is", "powerful", "simple", "and so on..."] 
random.shuffle(demo_list) 
print(demo_list) 
# ---- 結果(不同機器上的結果可能不一樣。) 
# ['powerful', 'simple', 'is', 'Python', 'and so on...']

(7)random.sample(sequence,k)

從指定序列中隨機獲取k個元素作為一個片段返回,sample函數不會修改原有序列。示例代碼如下:

list_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
slice = random.sample(list_num, 5) # 從list_num中隨機獲取5個元素,作為一個片斷返回 
print(slice) 
print(list_num) # 原有序列并沒有改變。

4.time模塊

time模塊中提供了一系列處理時間的函數,常用函數的說明如表3所示。

表3 time模塊的常用函數

函數說明
time.time()獲取當前時間,結果為實數,單位為秒
time.sleep(secs)進入休眠態(tài),時長由參數secs指定,單位為秒
time.strptime(string[,format])將一個時間格式(如:2019-02-25)的字符串解析為時間元組
time.localtime([secs])以struct_time類型輸出本地時間
time.asctime([tuple])獲取時間字符串,或將時間元組轉換為字符串
time.mktime(tuple)將時間元組轉換為秒數
strftime(format[, tuple])返回字符串表示的當地時間,格式由format決定                                   
下面通過一些示例來演示time模塊中部分函數的用法。

(1)time()函數

通過time()函數獲取當前的時間,利用此特性計算程序的執(zhí)行時間,示例代碼如下。

import time
before = time.time()
# 計算1000的10000次方
result = pow(1000, 10000)
after = time.time()
interval = after - before
print(f"運行時間為{interval}秒")

上述代碼首先導入了time模塊,使用time()函數獲取了當前的時間,然后使用pow()函數計算1000的10000次方,在計算該結果時會產生一定的計算時間,計算結束后再次使用time()函數獲取當前的時間,最后計算兩個時間的差值,以得到程序執(zhí)行的時間。

運行代碼,結果如下所示。

運行時間為0.0009999275207519531秒

(2)sleep()函數

如果在開發(fā)過程中需要對某個功能或某段代碼設置執(zhí)行時間間隔,那么可以通過sleep()函數實現。sleep()函數會讓程序進入休眠,并可自由設定休眠時間。

接下來,通過一個示例來演示sleep()函數的用法,具體代碼如下。

import random, time
name_li1 = ["李飛", "張羽", "趙韋", "王忠", "杜超"]
name_li2 = []
for i in range(len(name_li1)):    # 設置循環(huán)次數
    people = random.choice(name_li1) # 隨機選擇一個元素
    name_li1.remove(people)       # 為避免出現重復元素,移除已選擇元素
    name_li2.append(people)       # 添加到name_li2列表中
    time.sleep(2)             # 每隔2s執(zhí)行一次
    print(f"此時的成員有{name_li2}")

上述代碼首先導入了random模塊與time模塊,然后定義了兩個列表name_li1與name_li2, 遍歷列表name_li1,調用choice()函數隨機選擇一個元素,并將隨機獲取的元素每隔2秒添加到列表name_li2中,直至全部添加。

運行代碼,結果如下所示。

此時的成員有['張羽']
此時的成員有['張羽', '趙韋']
此時的成員有['張羽', '趙韋', '杜超']
此時的成員有['張羽', '趙韋', '杜超', '王忠']
此時的成員有['張羽', '趙韋', '杜超', '王忠', '李飛']

(3)strptime()函數與mktime()函數

如果在開發(fā)程序的過程中需要自定義時間戳,那么time模塊的strptime()函數與mktime()函數是最好的選擇,使用它們可以快速生成時間戳,具體代碼如下。

import time
str_dt = "2019-02-25 17:43:54"
# 轉換成時間數組
time_struct = time.strptime(str_dt, "%Y-%m-%d %H:%M:%S")
# 轉換成時間戳
timestamp = time.mktime(time_struct)
print(timestamp)

運行代碼,結果如下所示。

1551087834.0

(4)strftime()函數

strftime()函數來格式化日期,其定義格式如下:

time.strftime(format[, t])

接下來,通過一個案例來演示strftime()函數的使用,具體代碼如下所示:

import time
# 格式化成2016-03-20 11:45:39形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 格式化成Sat Mar 28 22:24:24 2016形式
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
# 將格式字符串轉換為時間戳
time_word = "Sat Mar 28 22:24:24 2016"
print(time.mktime(time.strptime(time_word, "%a %b %d %H:%M:%S %Y")))

運行代碼,結果如圖4所示。

Python的標準模塊:sys、os、random和time

5.calendar模塊

calendar模塊有很廣泛的方法用來處理年歷和月歷,如打印某月的月歷,具體代碼如下所示:

import calendar
calendar_january = calendar.month(2016, 1)
print("以下輸出2016年3月份的日歷:")
print(calendar_january)

運行代碼,結果如圖5所示。

Python的標準模塊:sys、os、random和time

圖5運行結果

除此之外,calendar模塊還提供了很多內置函數,具體如表4所示。

表4 calendar模塊的常見函數

序號函數和說明
1calendar.calendar(year,w=2,l=1,c=6) 返回一個多行字符串格式的year年年歷,三個月一行,間隔距離為c。 每日寬度間隔為w字符。每行長度為21* w+18+2* c。l是每星期行數
2calendar.firstweekday( ) 返回當前每周起始日期的設置。默認情況下,首次載入calendar模塊時返回0,即星期一
3calendar.isleap(year) 是閏年返回True,否則為False
4calendar.leapdays(y1,y2) 返回在y1,y2兩年之間的閏年總數
5calendar.month(year,month,w=2,l=1) 返回一個多行字符串格式的year年month月日歷,兩行標題,一周一行。每日寬度間隔為w字符。每行的長度為7* w+6。l是每星期的行數
6calendar.monthcalendar(year,month) 返回一個整數的單層嵌套列表。每個子列表裝載代表一個星期的整數。year年month月外的日期都設為0;范圍內的日子都由該月第幾日表示,從1開始
7calendar.monthrange(year,month) 返回兩個整數。第1個是該月的星期幾的日期碼,第2個是該月的日期碼。日從0(星期一)~6(星期日),月份為1(1月)~12(12月)
8calendar.prcal(year,w=2,l=1,c=6) 相當于 print(calendar.calendar(year,w,l,c))
9calendar.prmonth(year,month,w=2,l=1) 相當于 print(calendar.calendar(year, w, l, c))
10calendar.setfirstweekday(weekday) 設置每周的起始日期碼。0(星期一)~6(星期日)
11calendar.timegm(tupletime) 和time.gmtime相反:接受一個時間元組形式,返回該時刻的時間輟(1970紀元后經過的浮點秒數)
12calendar.weekday(year,month,day) 返回給定日期的日期碼。0(星期一)~6(星期日)。月份為1(1月)~12(12月)






猜你喜歡:

什么是Python模塊?Python模塊分為幾類?

python基礎系列教程—Python3.x標準模塊庫目錄

Python queue模塊功能介紹    

Python連接Mysql數據庫需要安裝什么模塊?

黑馬程序員python+大數據開發(fā)課程

分享到:
在線咨詢 我要報名
和我們在線交談!